package org.ms.nerver.governor.proxy;

import java.lang.reflect.Method;

public interface ProxyService {

	public <T> T getService(Class<T> clazz) throws Throwable;
	
	/**
	 * 执行调度
	 * @param method
	 * @param proxy
	 * @param args
	 * @param others
	 * @return
	 * @throws Throwable
	 */
	public abstract Object doInvoke(Method method, Object proxy, Object[] args,Object...others) throws Throwable;
	
	/**
	 * @param proxy 被代理对象
	 * @param method 被调用方法对象
	 * @param args 参数集合
	 */
	public abstract void doBefore(Object proxy, Method method, Object[] args);

	/**
	 * @param proxy 被代理对象
	 * @param method 被调用方法对象
	 * @param args 参数集合
	 * @param result 执行结果
	 */
	public abstract void doAfter(Object proxy, Method method, Object[] args,Object result);
	
}
